from django.http import HttpResponse
from django.shortcuts import render, redirect
from book.models import BookInfo


# Create your views here.
def create_book(request):
    book = BookInfo(
        name='abc',
        pub_date='2020-01-01',
        readcount=10,
    )
    book.save()
    return HttpResponse('create book')


def shop(request, city_id, mobile):
    # import re
    # if not re.match(r'\d{5}', mobile):
    #     return HttpResponse('没有子商品')
    query_params = request.GET
    print(query_params)
    # # < QueryDict: {'order': ['readcount']} >
    # # QueryDict具有字典的特性也具有 一键多值
    order = query_params.getlist('order')
    order = query_params['order']
    print(order)

    return HttpResponse('shop')


def register(request):
    data = request.POST
    print(data)
    return HttpResponse('register')


def json(request):
    # json不能用request.POST获取
    body = request.body
    # print(body,type(body))
    # b'{\r\n    "name":"wzy",\r\n    "age":18\r\n}'
    # 转换为json

    body_str = body.decode()
    # print(body_str)
    # {
    #     "name": "wzy",
    #     "age": 18
    # }
    # json形式的字符串可以转换成python的字典
    import json
    body_dict = json.loads(body_str)
    print(body_dict)
    # {'name': 'wzy', 'age': 18}
    # python的字典可以转换成json形式的字符串
    # body_dict['age'] = 20
    # print(body_dict)
    ####################请求头#################
    # print(request.META)
    print(request.META['Server_Post'])

    return HttpResponse('json')


def method(request):
    print(request.method)
    return HttpResponse('method')


from django.http import HttpResponse, HttpResponseNotFound, JsonResponse


def response(request):
    # json数据和python字典
    # json -> python字典
    # python字典 -> json
    info = {
        'name': 'wzy',
        'address': '四川',
    }
    girl_friends = [
        {
            'name': 'rose',
            'address': 'USA',
        },
        {
            'name': 'lily',
            'address': 'UK',
        },
    ]
    # import json
    # data = json.dumps(girl_friends)  # ->字符串
    # # print(type(data))
    # # return HttpResponse(data)
    #
    # # data 返回的响应数据 一般是字典类型
    # # safe=True 表示data是字典数据
    # response = JsonResponse(data=girl_friends, safe=False)
    # return response

    response = HttpResponse('response', status=200)
    response['name'] = 'wzy'
    return response
    # status : 100-599
    # 200 成功
    # 404 找不到页面 路由有问题
    # 403 禁止访问 权限不够


# 重定向
def redirect1(request):
    return redirect("https://yiyan.baidu.com/chat/4559331307")


####################################Cookie##############################
"""
第一次请求,携带 查询字符串
http://127.0.0.1:8000/set_cookie/?username=wzy&password=w1045986695
服务器接收到请求之后,获取username,服务器设置cookie信息,cookie信息包括username
浏览器接受到服务器响应之后吗,应该把cookie保存起来

第二次及其以后的请求,我们访问http://127.0.0.1:8000 都会携带cookie信息, 服务器可以获取cookie信息,来判断用户身份
"""


def set_cookie(request):
    # 1.获取查询字符串数据
    username = request.GET.get('username')
    password = request.GET.get('password')
    # 2.服务器设置cookie
    # 通过响应对象.set_cookie(key,value)方法
    response = HttpResponse('set_cookie')
    # max_age 是一个秒数,设置cookie的过期时间
    response.set_cookie('username', username, max_age=60 * 60)
    response.set_cookie('password', password)
    # 删除响应
    # response.delete_cookie('username')

    return response


def get_cookie(request):
    # 1.获取cookie
    # request.COOKIES 是字典数据
    username = request.COOKIES.get('username')
    password = request.COOKIES.get('password')
    # 2.返回响应
    return HttpResponse(username + password)


################################Session############################################
# session 是保存在服务器
# session依赖于cookie,session的key保存在cookie中
"""
第一次请求 http://127.0.0.1:8000/set_session/?username=wzy&password=w123 我们在服务器设置session信息
服务器同时会生成一个sessionid的cookie信息
浏览器接受到这个信息之后会把cookie信息保存起来

第二次及其之后的请求,都会携带这个sessionid,服务器会验证这个sessionid,验证没问题后读取相关信息,实现业务逻辑
"""


def set_session(request):
    # 1.模拟 获取用户数据
    username = request.GET.get('username')
    password = request.GET.get('password')
    # 2.服务器设置session信息
    request.session['username'] = username
    request.session['password'] = password

    request.session.set_expiry(60 * 60)
    # # clear 删除session里的数据,但是key保留
    # request.session.clear()
    # # flush 删除session里的数据,同时删除key
    # request.session.flush()

    return HttpResponse('set_session')


def get_session(request):
    # 1.获取session信息
    username = request.session.get('username')
    password = request.session.get('password')
    content = '{} ,{}'.format(username, password)
    # 2.返回响应
    return HttpResponse(content)


#########################类视图###########################

# def login(request):
#     print(request.method)
#     if request.method == 'GET':
#
#         return HttpResponse('get 逻辑')
#     else:
#         return HttpResponse('post 逻辑')

"""
类试图定义
1.类视图必须继承View
class 类视图(View):
    def get(self,request):
        return HttpResponse('xxxx')
    def http_method_lower(self,request):
        return HttpResponse('xxxx')
2.类视图中的方法是采用http方法小写来区分不同的请求方式
    
"""

from django.views import View


class LoginView(View):
    def get(self, request):
        return HttpResponse('get 逻辑')

    def post(self, request):
        return HttpResponse('post 逻辑')


# class Person(object):
#     # 对象方法
#     def play(self):
#         pass
#     @classmethod
#     def say(cls):
#         pass
#
#     @staticmethod
#     def eat():
#         pass
# Person.say()
#########################################
"""
我的订单，个人中心页面
如果登录用户，可以访问
如果未登录用户，不应该访问，应该跳转到登录页面

如何定义我有没有登录呢？？？我们以登录后台站点为例
"""

from django.contrib.auth.mixins import LoginRequiredMixin


# LoginRequiredMixin作用：只有登录用户才可以访问页面
class OrderView(LoginRequiredMixin, View):

    def get(self, request):
        # # 模拟一个标记位
        # isLogin = False
        # if not isLogin:
        #     return HttpResponse('请先登录')
        return HttpResponse('GET我的订单页面，这个页面必须登录')

    def post(self, request):
        return HttpResponse('POST我的订单页面，这个页面必须登录')


"""
多继承
Python,C++

"""
